summaryrefslogtreecommitdiff
path: root/src/pages/study/[slug].tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/study/[slug].tsx')
-rw-r--r--src/pages/study/[slug].tsx82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/pages/study/[slug].tsx b/src/pages/study/[slug].tsx
new file mode 100644
index 0000000..a5af523
--- /dev/null
+++ b/src/pages/study/[slug].tsx
@@ -0,0 +1,82 @@
+import { getContextData } from "waku/middleware/context";
+import { getState } from "@/lib/db";
+import { startStudySession } from "@/actions/srs";
+import StudySession from "@/components/Flashcard/StudySession";
+import { Button } from "@/components/ui/button";
+import { Card } from "@/components/ui/card";
+import LessonSelector from "@/components/srs/LessonSelector";
+import type { PageProps } from "waku/router";
+
+// This is a server component that gets the initial data
+export default async function StudyPage(props: PageProps<"/study/[slug]">) {
+ const lessonId = props.slug;
+ const ctx = getContextData() as any;
+ const userId = ctx?.user?.id;
+ // const state = getState(null);
+
+ // If not logged in, show login required message
+ if (!userId) {
+ return (
+ <div className="container mx-auto py-8">
+ <Card className="p-6 text-center">
+ <h1 className="text-2xl font-bold mb-4">Login Required</h1>
+ <p className="mb-4">
+ You need to be logged in to use the study session feature.
+ </p>
+ <Button asChild>
+ <a href="/login">Login</a>
+ </Button>
+ </Card>
+ </div>
+ );
+ }
+
+ // If no lesson ID provided, show lesson selector
+
+ // Get initial data for the study session
+
+ return (
+ <div className="container mx-auto py-8">
+ <Inner userId={userId} lessonId={lessonId} />
+ </div>
+ );
+}
+
+async function Inner({
+ userId,
+ lessonId,
+}: {
+ userId: number;
+ lessonId: string;
+}) {
+ return (
+ <>
+ {lessonId && Number(lessonId) ? (
+ <StudySessionOuter userId={userId} lessonId={Number(lessonId)} />
+ ) : (
+ <LessonSelector userId={userId} />
+ )}
+ </>
+ );
+}
+async function StudySessionOuter({
+ userId,
+ lessonId,
+}: {
+ userId: number;
+ lessonId: number;
+}) {
+ const initialData = await startStudySession(userId, lessonId, true);
+ console.log({ initialData });
+ if ("ok" in initialData)
+ return (
+ <>
+ <StudySession
+ userId={userId}
+ lessonId={lessonId}
+ initialData={initialData.ok}
+ />
+ </>
+ );
+ else return <p>idk</p>;
+}